/**
 * @param {Object} animal 被继承的对象
 * @param {Function} createDog 
 * @returns {Object}
 * @description
	寄生组合式继承是将组合继承和寄生式继承组合起来使用，避免了组合继承中的缺点
	
	优点：
	可以继承父类原型中的属性和方法。
	可以向父类构造函数传递参数，实现了子类实例属性的独立性。
	不会调用两次父类构造函数，不会产生父类实例属性被重复定义的
 */
function Animal(type) {
	this.type = type;
}
Animal.prototype.say = function() {
	console.log('I am an animal.');
}

function Dog(type) {
	Animal.call(this, type); //构造函数继承
}
// Dog.prototype = new Animal() //原型继承
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

const dog = new Dog('Dog');
console.log(dog.type); // Dog
dog.say(); // I am an animal.